package br.com.salao.session;

import java.util.Date;
import java.util.List;

import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

import br.com.salao.ejb.dao.AgendamentoDao;
import br.com.salao.ejb.dao.impl.AgendamentoDaoImpl;
import br.com.salao.entity.Agendamento;

@Stateless
@Remote(AgendamentoBase.class)
public class AgendamentoBean implements AgendamentoBase{

	/**
	 *  @author Dri
	 */
	
	private static final long serialVersionUID = 1L;
	
	@PersistenceContext(unitName = "SalaoBeleza")
	private EntityManager em;

	public AgendamentoBean(){
		//em = JpaUtil.getEntityManager();
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentosPendentesPorUsuario(int idUsuario, Date data) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentosPendentesPorUsuario(idUsuario, data);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentos(int idEstabelecimento, Date data) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentos(idEstabelecimento, data);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentosConcluidosPorUsuario(int idEstabelecimento, Date data) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentosConcluidosPorUsuario(idEstabelecimento, data);
	}	

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public Agendamento buscar(int idAgendamento) {
		AgendamentoDaoImpl dao = new AgendamentoDaoImpl(em);
		return dao.buscar(idAgendamento);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentosPorIdUsuario(int idUsuario) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentoPorUsuario(idUsuario);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentosCanceladosPorUsuario(int idUsuario) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentosCanceladosPorUsuario(idUsuario);
	}

	@TransactionAttribute
	public Agendamento inserir(Agendamento agendamento) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.inserir(agendamento);
	}

	@TransactionAttribute
	public Agendamento update(Agendamento agendamento) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.update(agendamento);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentoPorFuncionario(int idUsuario) throws Exception{
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentoPorFuncionario(idUsuario);
	}

	@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)
	public List<Agendamento> buscarAgendamentoPorUsuario(int idUsuario) throws Exception {
		AgendamentoDao dao = new AgendamentoDaoImpl(em);
		return dao.buscarAgendamentoPorUsuario(idUsuario);
	}

}
